<!DOCTYPE html>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>

<style>
.animate {
  animation: animate_width 10s;
}

@keyframes animate_width {
  from { width: 100px; }
  to { width: 200px; }
}
</style>

<div id="target"></div>

<script>
'use strict';

// Note that this test is only valid when DCHECK is enabled, as the underlying
// bug was DCHECK-only.
async_test(t => {
  target.classList = 'animate';
  // Grabbing the animation forces style clean, causing the Animation to be created.
  let animation = target.getAnimations()[0];

  // In http://crbug.com/838594 it was found that pausing a CSS animation and
  // then setting the currentTime would cause it to DCHECK the next time style
  // was cleaned (as long as the style clean was only from an animation update).
  animation.pause();
  animation.currentTime = 500;

  // If we make it to the next frame without DCHECKing, we're good. Note that
  // we double rAF to ensure that a new frame is produced.
  window.requestAnimationFrame(function() {
    window.requestAnimationFrame(t.step_func_done(() => {
      // Ensure that the animation pause state was not incorrectly toggled.
      assert_equals(animation.currentTime, 500);
    }));
  });
}, 'Pausing a CSS animation and then setting the currentTime should not ' +
    'cause a DCHECK');
</script>
